// 导入express
const express = require('express')

const cors = require('cors')

const app = express()



app.use(cors())
// 只能解析WWW开头的中间件
app.use(express.urlencoded({extends:false}))
// create application/json parser


// 验证前端传回来的数据

// 封装res.cc函数
app.use((req,res,next)=>{
    /// status 默认为1 表示失败，
    // err可能是object，或者string
    res.cc = function(err,status =1){
        res.send({
            status,
            message:err instanceof Error ? err.message : err
        })
    }
    next()
})
// 使用解析token的中间件  .unless指的是，在以这个为路由前缀时，可以不用token值
const expressJWT = require('express-jwt')
const config = require('./config.js')

// [/^\ /*****/ */ /]  *:代表任意路径
app.use(expressJWT({secret:config.jwtSecreKey}).unless({path:[/^\/user/]}))

// 导入并使用路由模块
const userRouter = require('./router/user')
const Joi = require('@hapi/joi')
app.use('/user',userRouter)


// 导入并使用用户信息的路由模块
const userinfoRouter = require('./router/userinfo')
app.use('/my',userinfoRouter)

// 导入并使用account页面中的接口的路由模块
const accountRouter = require('./router/account')
app.use('/account',accountRouter)

// 导入并使用town页面的接口路由模块
const townRouter = require('./router/town')
app.use('/town',townRouter)

// 导入并使用approver页面的接口路由模块
const ApproverRouter = require('./router/approver')
app.use('/approver', ApproverRouter)

// 导入并使用attendance 页面的接口路由模块
const attendanceRouter = require('./router/attendance')
app.use('/attendance',attendanceRouter)

// 导入并使用userAttendance 页面的接口路由模块
const attendanceInfo = require('./router/userAttendance')
app.use('/userAttendance',attendanceInfo)

// 定义错误级别的中间件
app.use((err,req,res,next) =>{
    if(err instanceof Joi.ValidationError) return res.cc(err)
    // token错误 认证失败
    if(err.name === 'UnauthorizedError') return res.cc('身份认证失败')
    res.cc(err)
})


app.listen(8082,() =>{
    console.log('runing 127.0.0.1:8082');
})